typedef

  如果一个声明以typedef为前缀,它就是为类型声明了一个新名字,而不是声明一个指定类型的对象。例如,

    typedef char* Pchar;
    Pchar p1, p2;        // p1和p2都是char*s
    char* p3 = p1;

一个这样定义的名字称为一个“typedef”,可以方便地作为原来较笨拙的类型名的缩写。例如,unsigned char对于频繁使用而言显得太长。那么我们就可以为之定义一个同义词:

typedef unsigned char uchar;

typedef的另一类使用是将对某个类型的直接引用限制到一个地方。例如,

typedef int int32;
typedef int int16;

如果我们在所有需要可能较大的整数的地方都用int32,那么就很容易将我们的程序移植到一个sizeof(int)是2的机器上,因为只要在代码中重新定义int32的惟一一个出现

typedef long int32;

无论是好是坏,typedef都只是其他类型的同义词,而不是独立的类型。因此,typedef可以随意地与作为其同义词的类型混合使用。如果希望得到独立的类型,而又有着相同的语义或相同的表示,那么就应该去用枚举(4.8节)或者类(第10章)。

🔚